CS 6375 Parker Whitehead
from kmeans import KMeans
from image_kmeans_wrapper import ImageKmeansWrapper
import numpy as np
import random
from IPython.display import Image, display
import os
import threading
file_size = os.path.getsize('Koala.jpg')
for k in [2,5,10,15,20]:
compression = []
for it in range(3):
image_kmeans = ImageKmeansWrapper('Koala.jpg')
image_kmeans.compress_image('compressed_Koala.jpg',colors=k)
compression.append(float(os.path.getsize('compressed_Koala.jpg')) / os.path.getsize('Koala.jpg'))
print(f'Koala iteration {it}, with {k} colors. Compression: {compression[it]:.5} of original size')
display(Image(filename='compressed_Koala.jpg',height=300,width=400))
print(f'Average compression: {np.average(compression)}')
print(f'Variance of compression: {np.var(compression)}\n\n\n')
Koala iteration 0, with 2 colors. Compression: 0.17126 of original size
Koala iteration 1, with 2 colors. Compression: 0.16492 of original size
Koala iteration 2, with 2 colors. Compression: 0.17126 of original size
Average compression: 0.16914671676713655 Variance of compression: 8.941493148086924e-06 Koala iteration 0, with 5 colors. Compression: 0.20106 of original size
Koala iteration 1, with 5 colors. Compression: 0.20093 of original size
Koala iteration 2, with 5 colors. Compression: 0.22344 of original size
Average compression: 0.20847831775804668 Variance of compression: 0.00011198868491501357 Koala iteration 0, with 10 colors. Compression: 0.22395 of original size
Koala iteration 1, with 10 colors. Compression: 0.21063 of original size
Koala iteration 2, with 10 colors. Compression: 0.22352 of original size
Average compression: 0.21937055948512973 Variance of compression: 3.8190007426580555e-05 Koala iteration 0, with 15 colors. Compression: 0.21031 of original size
Koala iteration 1, with 15 colors. Compression: 0.21049 of original size
Koala iteration 2, with 15 colors. Compression: 0.2137 of original size
Average compression: 0.21149860426477263 Variance of compression: 2.421071613949938e-06 Koala iteration 0, with 20 colors. Compression: 0.21045 of original size
Koala iteration 1, with 20 colors. Compression: 0.2075 of original size
Koala iteration 2, with 20 colors. Compression: 0.20625 of original size
Average compression: 0.20806422900730123 Variance of compression: 3.0954127107281876e-06
file_size = os.path.getsize('Penguins.jpg')
for k in [2,5,10,15,20]:
compression = []
for it in range(3):
image_kmeans = ImageKmeansWrapper('Penguins.jpg')
image_kmeans.compress_image('compressed_Penguins.jpg',colors=k)
compression.append(float(os.path.getsize('compressed_Penguins.jpg')) / os.path.getsize('Penguins.jpg'))
print(f'Penguins iteration {it}, with {k} colors. Compression: {compression[it]:.5} of original size')
display(Image(filename='compressed_Penguins.jpg',height=300,width=400))
print(f'Average compression: {np.average(compression)}')
print(f'Variance of compression: {np.var(compression)}\n\n\n')
Penguins iteration 0, with 2 colors. Compression: 0.1095 of original size
Penguins iteration 1, with 2 colors. Compression: 0.10927 of original size
Penguins iteration 2, with 2 colors. Compression: 0.1095 of original size
Average compression: 0.10942380667708018 Variance of compression: 1.1248344825519395e-08 Penguins iteration 0, with 5 colors. Compression: 0.13429 of original size
Penguins iteration 1, with 5 colors. Compression: 0.13764 of original size
Penguins iteration 2, with 5 colors. Compression: 0.13781 of original size
Average compression: 0.13657866599814442 Variance of compression: 2.62228650242494e-06 Penguins iteration 0, with 10 colors. Compression: 0.14903 of original size
Penguins iteration 1, with 10 colors. Compression: 0.1495 of original size
Penguins iteration 2, with 10 colors. Compression: 0.14774 of original size
Average compression: 0.14875734142416666 Variance of compression: 5.516250742226476e-07 Penguins iteration 0, with 15 colors. Compression: 0.14787 of original size
Penguins iteration 1, with 15 colors. Compression: 0.14838 of original size
Penguins iteration 2, with 15 colors. Compression: 0.15107 of original size
Average compression: 0.14910488728329274 Variance of compression: 1.9680743196361776e-06 Penguins iteration 0, with 20 colors. Compression: 0.14719 of original size
Penguins iteration 1, with 20 colors. Compression: 0.14747 of original size
Penguins iteration 2, with 20 colors. Compression: 0.14582 of original size
Average compression: 0.14682419793400914 Variance of compression: 5.193958575124556e-07
In regards to a balance between K and compression, 10 colors seems perfectly sufficient for defining the foreground for both the Koala and the Penguins, while 15 colors seems to add further detail to background elements.